package automenta.spacenet.run.old.audio; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; public class JavaSoundAudio implements Runnable { private static final int BUFFER_SIZE = 128000; SourceDataLine line = null; private boolean running; byte[] abData; AudioFormat audioFormat; int nWaveformType = Oscillator.WAVEFORM_SINE; float fSampleRate = 44100.0F; float fSignalFrequency = 200.0F; float fAmplitude = 0.7F; private Oscillator oscillator; //TODO support multiple oscillators public JavaSoundAudio() { super(); } public void start() throws IOException { audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, fSampleRate, 16, 2, 4, fSampleRate, false); oscillator = new Oscillator(nWaveformType, fSignalFrequency, fAmplitude, audioFormat, AudioSystem.NOT_SPECIFIED); DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); try { line = (SourceDataLine) AudioSystem.getLine(info); line.open(audioFormat); } catch (Exception e) { e.printStackTrace(); } new Thread(this).start(); } public void run() { line.start(); abData = new byte[BUFFER_SIZE]; running = true; while (running) { try { int nRead = oscillator.read(abData); int nWritten = line.write(abData, 0, nRead); } catch (IOException e) { System.err.println(e); } } if (line != null) { line.stop(); } } public void stop() { System.out.println("stopping"); running = false; } public void add(Oscillator o) { } public void remove(Oscillator o) { } }